package com.fourinone;

import java.util.logging.*;
import java.util.*;

public class LogUtil
{
	private static Logger logger;
	private static boolean fineFlag = false;
	private static boolean infoFlag = false;
	static
	{
		String levelName = ConfigContext.getLogLevel("FINE");
		fineFlag = Boolean.valueOf(ConfigContext.getConfig("LOG","FINE",null,"false"));
		infoFlag = Boolean.valueOf(ConfigContext.getConfig("LOG","INFO",null,"false"));
		//System.out.println(levelName+",fineFlag:"+fineFlag+",infoFlag:"+infoFlag);
		logger =  Logger.getLogger("com.log");
		Level lv = Level.parse(levelName);
		logger.setLevel(lv);
		logger.setUseParentHandlers(false);
		Handler handler = new ConsoleHandler();
		handler.setLevel(lv);
		logger.addHandler(handler);
	}
	
	public static void info(Object obj)
	{
		info(obj.toString());
	}
	
	public static void info(String logStr)
	{
		if(infoFlag)
			logger.log(Level.INFO, logStr);
	}
	
	public static void info(String logStr, Throwable e)
	{
		if(infoFlag)
			logger.log(Level.INFO, logStr, e);
		//StackTraceElement stack[] = e.getStackTrace();
		//logger.logp(Level.INFO, stack[0].getClassName(), stack[0].getMethodName(), logStr, e);
	}
	
	public static void info(String className, String methodName, Object logStr)
	{
		if(infoFlag)
			logger.logp(Level.INFO, className, methodName, getLogStr(logStr));
	}
	
	public static void info(String className, String methodName, Throwable e)
	{
		if(infoFlag)
			logger.logp(Level.INFO, className, methodName, "", e);
	}
	
	public static void info(String className, String methodName, Object logStr, Throwable e)
	{
		if(infoFlag)
			logger.logp(Level.INFO, className, methodName, getLogStr(logStr), e);
	}
	
	public static void fine(Object obj)
	{
		fine(obj.toString());
	}
	
	public static void fine(String logStr)
	{
		if(fineFlag)
			logger.log(Level.FINE, logStr);
	}
	
	public static void fine(String logStr, Throwable e)
	{
		if(fineFlag)
			logger.log(Level.FINE, logStr, e);
	}
	
	public static void fine(String className, String methodName, Object logStr)
	{
		if(fineFlag)
			logger.logp(Level.FINE, className, methodName, getLogStr(logStr));
	}
	
	public static void fine(String className, String methodName, Throwable e)
	{
		if(fineFlag)
			logger.logp(Level.FINE, className, methodName, "", e);
	}	
	
	public static void fine(String className, String methodName, Object logStr, Throwable e)
	{
		if(fineFlag)
			logger.logp(Level.FINE, className, methodName, getLogStr(logStr), e);
	}
	
	public static void warn(String className, String methodName, Object logStr)
	{
		logger.logp(Level.WARNING, className, methodName, getLogStr(logStr));
	}

//2014.1.7	
	public static void fail(String className, String methodName, Object logStr)
	{
		logger.logp(Level.SEVERE, className, methodName, getLogStr(logStr));
	}
	
	public static String getLogStr(Object logStr)
	{
		return logStr!=null?logStr.toString():null;
	}
	
	public static void main(String args[])
	{
		LogUtil.fine("hhhhhhhhhhh");
		LogUtil.info("select * from db");
	}
}